package main

import (
	"bufio"
	"encoding/json"
	"flag"
	"fmt"
	"os"
	"sort"
	"strings"
)

/*
参数示例：
删除1-3行、5-10行，倒数第3行到倒数第2行
[[1,3],[5,10]],[[-3,-2]]
*/

func main() {
	var json1 = flag.String("json", "[[1,3],[5,10]]", `参数示例：
	删除1-3行、5-10行
	"[[1,3],[5,10]]"`)
	var src = flag.String("s", "./src", "输入文件目录")
	var dst = flag.String("d", "./dst", "输出文件目录")
	flag.Parse()
	lineNums := [][]int{}
	err := json.Unmarshal([]byte(*json1), &lineNums)
	if err != nil {
		panic(err)
	}
	d, err := os.Open(*src)
	if err != nil {
		panic(err)
	}
	files, err := d.Readdirnames(0)
	if err != nil {
		panic(err)
	}
	sort.Strings(files)
	for i, name := range files {
		lines := []string{}
		fp, err := os.Open(*src + "/" + name)
		if err != nil {
			panic(err)
		}
		buf := bufio.NewReader(fp)
		for {
			line1, err := buf.ReadString('\n')
			if err != nil {
				break
			}
			lines = append(lines, line1)
		}

		fp.Close()

		out, err := os.Create(fmt.Sprintf("%v/%04v.txt", *dst, i+1))
		if err != nil {
			panic(err)
		}

		for n := 0; n < len(lines); n++ {
			var skip = false
			for _, r := range lineNums {
				min := r[0] - 1
				max := r[1] - 1
				if min < 0 {
					min = len(lines) + min + 2
				}
				if max < 0 {
					max = len(lines) + max + 2
				}
				if n >= min && n <= max {
					skip = true
					break
				}
			}
			if skip {
				fmt.Printf("skip:[%v] %v", i+1, lines[n])
				continue
			}
			l := strings.TrimSpace(lines[n])
			if len(l) > 0 {
				fmt.Fprintf(out, "\t%s\r\n\n", l)
			}

		}
		out.Close()
	}
}
